<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>InitPHP框架 PHP框架 - A PHP Framework - CURL</title>
<link href="static/common.css" type="text/css" rel="stylesheet" />
<meta name="keywords" content="php框架，国产php框架, initphp框架，MVC，分层体系" />
<meta name="description" content="initphp框架是一款国产php框架。initphp框架主要基于MVC模式，具备代码清晰，操作简单，功能齐全，开发快速，高效安全等特点，是您选择php框架的首选。" />
</head>
<body>
<div class="header">
  <div class="header_nav">InitPHP (A PHP Framework) 用户手册</div>
  <div class="header_div">
    <div class="header_title">第6章 6.7.2 CURL</div>
    <div class="header_right"><a href="6_7_1.htm">上一页</a> <a href="6_7_3.htm">下一页</a> </div>
  </div>
</div>

<div class="title">
  <h3>接口描述：</h3>
</div>
<p>Curl类。属于InitPHP框架扩展类，需要通过$this->getLibrary()方法获取</p>

<div class="title">
  <h3>使用方法：</h3>
</div>
<pre id="php" class="php">
$curl = $this->getLibrary('curl'); 
</pre>
<div class="nav"></div>
<div class="title">
  <h3>实例：</h3>
</div>
<pre id="php" class="php">
class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		$curl = $this->getLibrary('curl'); 
	 	try {
			$a = $curl->get("http://127.0.0.1");
			echo $a;
		} catch (Exception $e) {
			//异常部分和超时处理
			echo $e->getMessage();
		}
		$this->view->display(); //模板显示
	}
	
}</pre>
<div class="title">
  <h3>具体类：</h3>
</div>
<pre id="php" class="php">
if (!defined('IS_INITPHP')) exit('Access Denied!');   
/*********************************************************************************
 * InitPHP 3.8.1 国产PHP开发框架   扩展类库-CURL
 *-------------------------------------------------------------------------------
 * 版权所有: CopyRight By initphp.com
 * 您可以自由使用该源码，但是在使用过程中，请保留作者信息。尊重他人劳动成果就是尊重自己
 *-------------------------------------------------------------------------------
 * Author:zhuli Dtime:2014-11-25 
***********************************************************************************/
class curlInit {
	
	private $cookie = '/data/cookie.txt'; //cookie保存路径
	
	/**
	 * CURL-get方式获取数据
	 * @param string $url URL
	 * @param string $proxy 是否代理
	 * @param int    $timeout 请求时间
	 */
	public function get($url, $proxy = null, $timeout = 10) {
		if (!$url) return false;
		$ssl = substr($url, 0, 8) == 'https://' ? true : false;
		$curl = curl_init();
		if (!is_null($proxy)) curl_setopt ($curl, CURLOPT_PROXY, $proxy); 
		curl_setopt($curl, CURLOPT_URL, $url);
		if ($ssl) {
			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 
			curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
		}
		$cookie_file = $this->get_cookie_file();
		curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。 
    	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);//包含cookie数据的文件名，cookie文件的格式可以是Netscape格式，或者只是纯HTTP头部信息存入文件。 
    	curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。		
    	curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。 
    	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器，使用CURLOPT_MAXREDIRS可以限定递归返回的数量。 	
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式		
		curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数。 
		$content = curl_exec($curl);
		$curl_errno = curl_errno($curl);
		curl_close($curl);
		if ($curl_errno > 0) {
			throw new Exception($curl_errno);
			return false;
		}
		return $content;
	}
	
	/**
	 * CURL-post方式获取数据
	 * @param string $url URL
	 * @param array  $data POST数据
	 * @param string $proxy 是否代理
	 * @param int    $timeout 请求时间
	 */
	public function post($url, $data, $proxy = null, $timeout = 10) {
		if (!$url) return false;
		if ($data) {
			$data = http_build_query($data);
		}
		$ssl = substr($url, 0, 8) == 'https://' ? true : false;
		$curl = curl_init();
		if (!is_null($proxy)) curl_setopt ($curl, CURLOPT_PROXY, $proxy); 
		curl_setopt($curl, CURLOPT_URL, $url);	
		if ($ssl) {
			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 
			curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
		}
		$cookie_file = $this->get_cookie_file();
		curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。 
    	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);//包含cookie数据的文件名，cookie文件的格式可以是Netscape格式，或者只是纯HTTP头部信息存入文件。 
		curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。		
    	curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。 
    	curl_setopt($curl, CURLOPT_POST, true); //发送一个常规的Post请求
    	curl_setopt($curl,  CURLOPT_POSTFIELDS, $data);//Post提交的数据包
    	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器，使用CURLOPT_MAXREDIRS可以限定递归返回的数量。 	
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式		
		curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数。 
		$content = curl_exec($curl);
		$curl_errno = curl_errno($curl);
		curl_close($curl);
		if ($curl_errno > 0) {
			throw new Exception($curl_errno);
			return false;
		}
		return $content;
	}
	
	/**
	 * CURL-put方式获取数据
	 * @param string $url URL
	 * @param array  $data POST数据
	 * @param string $proxy 是否代理
	 * @param int    $timeout 请求时间
	 */
	public function put($url, $data, $proxy = null, $timeout = 10) {
		if (!$url) return false;
		if ($data) {
			$data = http_build_query($data);
		}
		$ssl = substr($url, 0, 8) == 'https://' ? true : false;
		$curl = curl_init();
		if (!is_null($proxy)) curl_setopt ($curl, CURLOPT_PROXY, $proxy); 
		curl_setopt($curl, CURLOPT_URL, $url);
		if ($ssl) {
			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 
			curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
		}
		$cookie_file = $this->get_cookie_file();
		curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。 
    	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);//包含cookie数据的文件名，cookie文件的格式可以是Netscape格式，或者只是纯HTTP头部信息存入文件。 
    	curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。		
    	curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。 
    	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器，使用CURLOPT_MAXREDIRS可以限定递归返回的数量。 	
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式		
		curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数
		$data = (is_array($data)) ? http_build_query($data) : $data; 
		curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); 
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($data))); 
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
 
		$content = curl_exec($curl);
		$curl_errno = curl_errno($curl);
		curl_close($curl);
		if ($curl_errno > 0) {
			throw new Exception($curl_errno);
			return false;
		}
		return $content;
	}
	
	/**
	 * CURL-DEL方式获取数据
	 * @param string $url URL
	 * @param array  $data POST数据
	 * @param string $proxy 是否代理
	 * @param int    $timeout 请求时间
	 */
	public function del($url, $data, $proxy = null, $timeout = 10) {
		if (!$url) return false;
		if ($data) {
			$data = http_build_query($data);
		}
		$ssl = substr($url, 0, 8) == 'https://' ? true : false;
		$curl = curl_init();
		if (!is_null($proxy)) curl_setopt ($curl, CURLOPT_PROXY, $proxy); 
		curl_setopt($curl, CURLOPT_URL, $url);
		if ($ssl) {
			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 
			curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
		}
		$cookie_file = $this->get_cookie_file();
		curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。 
    	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);//包含cookie数据的文件名，cookie文件的格式可以是Netscape格式，或者只是纯HTTP头部信息存入文件。 
    	curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。		
    	curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。 
    	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器，使用CURLOPT_MAXREDIRS可以限定递归返回的数量。 	
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式		
		curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数
		$data = (is_array($data)) ? http_build_query($data) : $data; 
		curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DEL'); 
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($data))); 
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
 
		$content = curl_exec($curl);
		$curl_errno = curl_errno($curl);
		curl_close($curl);
		if ($curl_errno > 0) {
			throw new Exception($curl_errno);
			return false;
		}
		return $content;
	}
	
	/**
	 * 获取COOKIE存放文件的地址
	 */
	private function get_cookie_file() {
		return APP_PATH . $this->cookie;
	}
	
 }</pre>

<div class="footer">版权所有：<a href="">http://initphp.com</a> InitPHP (A PHP Framework) By @Aliyun_zhuli</div>
<script src="static/jquery.js" type="text/javascript"></script>
<link href="static/prettify/prettify.css" rel="stylesheet" type="text/css">
<script src="static/prettify/prettify.js" type="text/javascript"></script>
<script type="text/javascript" src="static/comm.js"></script>
</body>
</html>
